<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>初始化 state - 紫霞仙子</title>
</head>
<body>
    <div id="root"> </div>

    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>

    <script type="text/babel">

        function fn(){
            // console.log('我是一个函数哦');
            //react 事件回调中, this 的指向 undefined
            console.log(this);
        }


        class App extends React.Component {
            state = {
                isNight: false
            }

            //构造方法
            constructor(){
                super();
                //添加实例对象方法, bind 用来改变函数的 this 执行, 并返回一个新函数
                //3. 创建一个方法, 使 this 的值指向实例对象
                this.fn = this.fn.bind(this);    //这里返回的新函数, this 是指向实例对象的
            }

            //为什么是指向『实例对象』的
            render(){
                //获取 isNight 的值    这里的 this 是指向实例对象的.
                let {isNight} = this.state; //解构赋值
                return <div>
                        <h2>至尊宝, 我是 {isNight ? '青霞' : '紫霞'} 仙子</h2> 
                        <button onClick={function(){
                            console.log('我是一个函数哦');
                            console.log(this);
                        }} >切换白天与黑色</button>
                        <button onClick={fn}>切换白天与黑色</button>
                        {/*1. 为标签元素添加事件属性   onClick   onMouseOver*/}
                        <button onClick={this.fn}>切换白天与黑色</button>
                    </div>
            }

            //保存在原型对象中    实例对象中,有一个方法  setState , 该方法用来修改 state 中的数据
            //2. 类的内部声明方法, 事件回调
            fn(){
                console.log('我是一个类内部的方法');
                //调用 实例对象身上的 setState 修改 state 的值, 接收一个参数, 对象
                //获取 isNight 的值
                let {isNight} = this.state;
                //这里一定要使用 setState 进行状态的值的设置, 不要使用 this.state.isNight 设置
                this.setState({
                    isNight: !isNight
                })
            }

        }

        ReactDOM.render(<App />, document.getElementById('root'));

    </script>
</body>
</html>